home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d963.lha / SIOD / scm / countchangec.scm < prev    next >
Text File  |  1992-09-24  |  3KB  |  69 lines

  1. (define (count-change-rec amount coins)
  2.         (cond ((= amount 0) 1)
  3.               ((or (< amount 0) (null? coins)) 0)
  4.               (else (+ (count-change-rec amount (cdr coins))
  5.                        (count-change-rec (- amount (car coins)) coins)))))
  6.  
  7. (define (count-change-1 amount)
  8.         (let ((50L 0)
  9.               (100L 0)
  10.               (200L 0)
  11.               (changes 0))
  12.              (while (< 200L amount) 
  13.                     (while (< (+ 100L 200L) amount) 
  14.                            (while (< (+ 50L 100L 200L) amount)
  15.                                   (set! 50L (+ 50L 50)))
  16.                            (when (= (+ 50L 100L 200L) amount)
  17.                                  (set! changes (+ changes 1)))
  18.                            (set! 50L 0)
  19.                            (set! 100L (+ 100L 100)))
  20.                     (when (= (+ 100L 200L) amount)
  21.                           (set! changes (+ changes 1)))
  22.                     (set! 100L 0)
  23.                     (set! 200L (+ 200L 200)))
  24.               (when (= 200L amount)
  25.                     (set! changes (+ changes 1)))
  26.               changes))
  27.  
  28. (define (count-change-2 amount)
  29.         (let ((50L 0)
  30.               (100L 0)
  31.               (200L 0)
  32.               (changes 0)
  33.               (not-done #t))
  34.              (while not-done
  35.                     (if (< (+ 50L 100L 200L) amount)
  36.                         (set! 50L (+ 50L 50))
  37.                         (begin (when (= (+ 50L 100L 200L) amount)
  38.                                      (set! changes (+ changes 1)))
  39.                                (set! 50L 0)
  40.                                (if (< (+ 100L 200L) amount)
  41.                                    (set! 100L (+ 100L 100))
  42.                                    (begin (set! 100L 0)
  43.                                           (set! 200L (+ 200L 200))
  44.                                           (when (> 200L amount)
  45.                                                 (set! not-done #f)))))))
  46.               changes))
  47.  
  48. (define (count-change-3 amount)
  49.         (do ((50L 0 (if (< (+ 50L 100L 200L) amount)
  50.                         (+ 50L 50)
  51.                         0))
  52.              (100L 0 (if (>= (+ 50L 100L 200L) amount)
  53.                          (if (< (+ 100L 200L) amount)
  54.                              (+ 100L 100)
  55.                              0)
  56.                          100L))
  57.              (200L 0 (if (>= (+ 100L 200L) amount)
  58.                          (+ 200L 200)
  59.                          200L))
  60.              (changes 0 (if (= (+ 50L 100L 200L) amount)
  61.                               (+ changes 1)
  62.                               changes)))
  63.             ((> 200L amount) changes)))
  64.  
  65. (define (my-while pred exp)
  66.         (when (thaw pred)
  67.               (thaw exp) (my-while pred exp)))
  68.  
  69.